<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>systemd-socket-proxyd
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>systemd-socket-proxyd 中文手册</h1><h2 id="auth_name">译者：<strong><a href="../index.html">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="../index.html">金步国作品集</a> [ <a href="../index.html">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="systemd-socket-proxyd"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>systemd-socket-proxyd — 在两个套接字之间执行双向代理</p></div><div class="refsynopsisdiv"><h2>大纲</h2><div class="cmdsynopsis"><p><code class="command">systemd-socket-proxyd</code>  [<em class="replaceable"><code>OPTIONS</code></em>...]  <em class="replaceable"><code>HOST</code></em>:<em class="replaceable"><code>PORT</code></em> </p></div><div class="cmdsynopsis"><p><code class="command">systemd-socket-proxyd</code>  [<em class="replaceable"><code>OPTIONS</code></em>...]  <em class="replaceable"><code>UNIX-DOMAIN-SOCKET-PATH</code></em>
       </p></div></div><div class="refsect1"><a name="id-1.5"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p>
    <span class="command"><strong>systemd-socket-proxyd</strong></span>
    是一个基于套接字启动的通用套接字转发守护进程，
    适用于 IPv4, IPv6, UNIX 三种不同的套接字。
    它可以在一个本地监听套接字与另一个套接字(本地或远程)
    之间双向转发流量。</p><p>此工具的一个用途是
    为原本不支持基于套接字启动机制的服务提
    供基于套接字启动的能力。
    为了达到这个目的，此工具从 systemd 继承套接字，接受客户端连接，
    并在客户端与服务端之间充当连接代理，
    双向转发流量。</p><p>该工具的行为与
    <a href="https://linux.die.net/man/1/socat"><span class="citerefentry"><span class="refentrytitle">socat</span>(1)</span></a> 类似。
    不同之处在于即使在 "<code class="literal">Accept=no</code>" 的情况下，
    <span class="command"><strong>systemd-socket-proxyd</strong></span>
    也能支持基于套接字的启动，
    并且这种基于事件驱动的机制，
    在连接数很大的时候弹性更佳。</p></div><div class="refsect1"><a name="id-1.6"></a><h2 id="选项">选项<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E9%80%89%E9%A1%B9">¶</a></h2><p>能够识别的命令行选项如下：</p><div class="variablelist"><dl class="variablelist"><dt id="-h"><span class="term"><code class="option">-h</code>, </span><span class="term"><code class="option">--help</code></span><a class="headerlink" title="Permalink to this term" href="systemd-socket-proxyd.html#-h">¶</a></dt><dd><p><a name="help-text"></a>显示简短的帮助信息并退出。
    </p></dd><dt id="--version"><span class="term"><code class="option">--version</code></span><a class="headerlink" title="Permalink to this term" href="systemd-socket-proxyd.html#--version">¶</a></dt><dd><p><a name="version-text"></a>显示简短的版本信息并退出。</p></dd><dt id="--connections-max="><span class="term"><code class="option">--connections-max=</code>, </span><span class="term"><code class="option">-c</code></span><a class="headerlink" title="Permalink to this term" href="systemd-socket-proxyd.html#--connections-max=">¶</a></dt><dd><p>设置最大并发连接数，默认值是 256 。
        超出限制的连接将会被拒绝。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.7"></a><h2 id="退出状态">退出状态<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81">¶</a></h2><p>返回值为 0 表示成功，
    非零返回值表示失败代码。</p></div><div class="refsect1"><a name="id-1.8"></a><h2 id="例子">例子<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E4%BE%8B%E5%AD%90">¶</a></h2><div class="refsect2"><a name="id-1.8.2"></a><h3 id="简单例子">简单例子<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E7%AE%80%E5%8D%95%E4%BE%8B%E5%AD%90">¶</a></h3><p>在没有名字空间的情况下，
      按照依赖关系使用两个服务。</p><div class="example"><a name="id-1.8.2.3"></a><p class="title"><b>例 1. proxy-to-nginx.socket</b></p><div class="example-contents"><pre class="programlisting">[Socket]
ListenStream=80

[Install]
WantedBy=sockets.target</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.2.4"></a><p class="title"><b>例 2. proxy-to-nginx.service</b></p><div class="example-contents"><pre class="programlisting">[Unit]
Requires=nginx.service
After=nginx.service
Requires=proxy-to-nginx.socket
After=proxy-to-nginx.socket

[Service]
ExecStart=/usr/lib/systemd/systemd-socket-proxyd /run/nginx/socket
PrivateTmp=yes
PrivateNetwork=yes</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.2.5"></a><p class="title"><b>例 3. nginx.conf</b></p><div class="example-contents"><pre class="programlisting">
[…]
server {
    listen       unix:/run/nginx/socket;
    […]
</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.2.6"></a><p class="title"><b>例 4. 开启代理</b></p><div class="example-contents"><pre class="programlisting"># systemctl enable --now proxy-to-nginx.socket
$ curl http://localhost:80/</pre></div></div><br class="example-break"></div><div class="refsect2"><a name="id-1.8.3"></a><h3 id="名字空间中的例子">名字空间中的例子<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E5%90%8D%E5%AD%97%E7%A9%BA%E9%97%B4%E4%B8%AD%E7%9A%84%E4%BE%8B%E5%AD%90">¶</a></h3><p>与前面的例子类似，不同之处在于
      将套接字代理与主服务运行在同一个私有名字空间内，并且假定在
      <code class="filename">nginx.service</code> 中已经设置了
      <code class="varname">PrivateTmp=yes</code> 与
      <code class="varname">PrivateNetwork=yes</code> 。</p><div class="example"><a name="id-1.8.3.3"></a><p class="title"><b>例 5. proxy-to-nginx.socket</b></p><div class="example-contents"><pre class="programlisting">[Socket]
ListenStream=80

[Install]
WantedBy=sockets.target</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.3.4"></a><p class="title"><b>例 6. proxy-to-nginx.service</b></p><div class="example-contents"><pre class="programlisting">[Unit]
Requires=nginx.service
After=nginx.service
Requires=proxy-to-nginx.socket
After=proxy-to-nginx.socket
JoinsNamespaceOf=nginx.service

[Service]
ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8080
PrivateTmp=yes
PrivateNetwork=yes</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.3.5"></a><p class="title"><b>例 7. nginx.conf</b></p><div class="example-contents"><pre class="programlisting">[…]
server {
    listen       8080;
    […]</pre></div></div><br class="example-break"><div class="example"><a name="id-1.8.3.6"></a><p class="title"><b>例 8. 开启代理</b></p><div class="example-contents"><pre class="programlisting"># systemctl enable --now proxy-to-nginx.socket
$ curl http://localhost:80/</pre></div></div><br class="example-break"></div></div><div class="refsect1"><a name="id-1.9"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="systemd-socket-proxyd.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="systemd.socket.html#"><span class="citerefentry"><span class="refentrytitle">systemd.socket</span>(5)</span></a>,
      <a href="systemd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd.service</span>(5)</span></a>,
      <a href="systemctl.html#"><span class="citerefentry"><span class="refentrytitle">systemctl</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/socat"><span class="citerefentry"><span class="refentrytitle">socat</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/nginx"><span class="citerefentry"><span class="refentrytitle">nginx</span>(1)</span></a>,
      <a href="https://linux.die.net/man/1/curl"><span class="citerefentry"><span class="refentrytitle">curl</span>(1)</span></a>
    </p></div></div></body></html>
